<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title>kerbernetes 容器云实验环境的安装 - 服务计算 - 中山大学</title>
  <meta name="renderer" content="webkit" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>

<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />

<meta name="theme-color" content="#f8f5ec" />
<meta name="msapplication-navbutton-color" content="#f8f5ec">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#f8f5ec">


<meta name="author" content="潘茂林" /><meta name="description" content="kerbernetes 容器云实验环境的安装（Rancher） {:.no_toc} 目录 {:toc} 由于众所周知的原因，kerbernetes及其周边产品关系复杂，安装 kerbernetes 反正是一件痛苦的煎熬。" /><meta name="keywords" content="中山大学, 数据科学与计算机, 服务计算" />






<meta name="generator" content="Hugo 0.74.3 with theme even" />


<link rel="canonical" href="http://pmlpml.git.io/service-computing/post/ex-install-k8s-rancher/" />
<link rel="apple-touch-icon" sizes="180x180" href="/service-computing/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/service-computing/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/service-computing/favicon-16x16.png">
<link rel="manifest" href="/service-computing/manifest.json">
<link rel="mask-icon" href="/service-computing/safari-pinned-tab.svg" color="#5bbad5">



<link href="/service-computing/sass/main.min.8c3cbcb0324c2bb4875ceccba4007cbad4b4ac8377f33af9953c3e7684534a50.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.1.20/dist/jquery.fancybox.min.css" integrity="sha256-7TyXnr2YU040zfSP+rEcz29ggW4j56/ujTPwjMzyqFY=" crossorigin="anonymous">


<meta property="og:title" content="kerbernetes 容器云实验环境的安装" />
<meta property="og:description" content="kerbernetes 容器云实验环境的安装（Rancher） {:.no_toc} 目录 {:toc} 由于众所周知的原因，kerbernetes及其周边产品关系复杂，安装 kerbernetes 反正是一件痛苦的煎熬。" />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://pmlpml.git.io/service-computing/post/ex-install-k8s-rancher/" />

<meta itemprop="name" content="kerbernetes 容器云实验环境的安装">
<meta itemprop="description" content="kerbernetes 容器云实验环境的安装（Rancher） {:.no_toc} 目录 {:toc} 由于众所周知的原因，kerbernetes及其周边产品关系复杂，安装 kerbernetes 反正是一件痛苦的煎熬。">

<meta itemprop="wordCount" content="1957">



<meta itemprop="keywords" content="" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="kerbernetes 容器云实验环境的安装"/>
<meta name="twitter:description" content="kerbernetes 容器云实验环境的安装（Rancher） {:.no_toc} 目录 {:toc} 由于众所周知的原因，kerbernetes及其周边产品关系复杂，安装 kerbernetes 反正是一件痛苦的煎熬。"/>

<!--[if lte IE 9]>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/classlist/1.1.20170427/classList.min.js"></script>
<![endif]-->

<!--[if lt IE 9]>
  <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->

</head>
<body>
  <div id="mobile-navbar" class="mobile-navbar">
  <div class="mobile-header-logo">
    <a href="/service-computing/" class="logo">服务计算</a>
  </div>
  <div class="mobile-navbar-icon">
    <span></span>
    <span></span>
    <span></span>
  </div>
</div>
<nav id="mobile-menu" class="mobile-menu slideout-menu">
  <ul class="mobile-menu-list">
    <a href="/service-computing/post/index-2020">
        <li class="mobile-menu-item">首页</li>
      </a><a href="/service-computing/post/">
        <li class="mobile-menu-item">归档</li>
      </a><a href="/service-computing/tags/">
        <li class="mobile-menu-item">标签</li>
      </a><a href="/service-computing/about/">
        <li class="mobile-menu-item">关于</li>
      </a>
  </ul>
</nav>
  <div class="container" id="mobile-panel">
    <header id="header" class="header">
        <div class="logo-wrapper">
  <a href="/service-computing/" class="logo">服务计算</a>
</div>

<nav class="site-navbar">
  <ul id="menu" class="menu">
    <li class="menu-item">
        <a class="menu-item-link" href="/service-computing/post/index-2020">首页</a>
      </li><li class="menu-item">
        <a class="menu-item-link" href="/service-computing/post/">归档</a>
      </li><li class="menu-item">
        <a class="menu-item-link" href="/service-computing/tags/">标签</a>
      </li><li class="menu-item">
        <a class="menu-item-link" href="/service-computing/about/">关于</a>
      </li>
  </ul>
</nav>
    </header>

    <main id="main" class="main">
      <div class="content-wrapper">
        <div id="content" class="content">
          <article class="post">
    
    <header class="post-header">
      <h1 class="post-title">kerbernetes 容器云实验环境的安装</h1>

      <div class="post-meta">
        <span class="post-time"> 0001-01-01 </span>
        
        
      </div>
    </header>

    <div class="post-toc" id="post-toc">
  <h2 class="post-toc-title"></h2>
  <div class="post-toc-content always-active">
    <nav id="TableOfContents">
  <ul>
    <li><a href="#kerbernetes-容器云实验环境的安装rancher">kerbernetes 容器云实验环境的安装（Rancher）</a>
      <ul>
        <li><a href="#1主机host网络环境">1、主机（HOST）网络环境</a></li>
        <li><a href="#2创建基础虚拟机-centos-docker">2、创建基础虚拟机 centos-docker</a></li>
        <li><a href="#3下载需要的镜像">3、下载需要的镜像</a></li>
        <li><a href="#4安装-kubernetes-快体验">4、安装 kubernetes 快体验</a></li>
        <li><a href="#5在集群中部署-hello-world">5、在集群中部署 hello-world</a></li>
        <li><a href="#6小结">6、小结</a></li>
      </ul>
    </li>
  </ul>
</nav>
  </div>
</div>
    <div class="post-content">
      <h1 id="kerbernetes-容器云实验环境的安装rancher">kerbernetes 容器云实验环境的安装（Rancher）</h1>
<p>{:.no_toc}</p>
<ul>
<li>目录
{:toc}</li>
</ul>
<p>由于众所周知的原因，kerbernetes及其周边产品关系复杂，安装 kerbernetes 反正是一件痛苦的煎熬。幸好国内各大服务商都给出一些一键部署的方案，Rancher 是比较好的开源服务之一。</p>
<p>本文介绍在一台PC或笔记本电脑上使用 VirtualBox 配置多个虚拟机机部署 kerbernetes 集群的方法。部署工具 Rancher</p>
<p>实验目的：</p>
<ul>
<li>了解容器云基本概念！</li>
</ul>
<h2 id="1主机host网络环境">1、主机（HOST）网络环境</h2>
<p><strong>1.1、如果你有一台路由器：</strong></p>
<p>由于 windows 非服务器版本不支持 IP Forwarding and Routing，因此你需要一台路由（家用无线路由即可）。有了路由器，主流系统做HOST都可以。配置如图所示：</p>
<p><img src="images/net-bridge-host-vm.png" alt=""></p>
<p>具体 virtualBox 配置是：</p>
<p><img src="images/net-bridge-host-vm-vbox.png" alt=""></p>
<p><strong>1.2、如果你省路由，就必须用 Linux 作为主机</strong></p>
<p>请打开 IP Forwarding，配置好路由，将 VirtualBox 虚拟网转发到外网。如同 docker 的网桥配置一样。</p>
<h2 id="2创建基础虚拟机-centos-docker">2、创建基础虚拟机 centos-docker</h2>
<ol>
<li>虚拟机环境准备
<ul>
<li>主机安装了 Virtualbox</li>
<li>构建 minimal centos 7 虚拟机</li>
</ul>
</li>
<li>用链接方式，复制已有虚拟机， 取名 centos-docker
<ul>
<li>检查该虚拟机设置 - 网络，确保只有一块网卡有效</li>
<li>设置网卡 <code>连接方式</code> = <code>桥接网卡</code></li>
<li><code>界面名称</code> = 你访问外网的网卡</li>
</ul>
</li>
<li>配置虚拟机
<ul>
<li>启动虚拟机，用 <code>ip address</code> 检查网络是否动态获得路由分配的地址</li>
<li>检查网络网桥是否工作正常，如 <code>ping www.sysu.edu.cn</code></li>
<li>升级 centos 以保证 docker 能正常启动。 <code>yum update</code></li>
<li>设虚拟机网络为固定地址（如：192.168.3.200），使用 <code>nmtui</code>
<ul>
<li>将网卡设为手动， 网络地址 <code>192.168.3.200/24</code> ,</li>
<li>gateway <code>192.168.3.1</code> ，即路由的地址</li>
<li>DNS <code>223.5.5.5</code> 阿里的 DNS</li>
<li>然后， deactivitate, activitate 该网卡</li>
<li>修改 hostname = centos-docker</li>
<li>退出</li>
<li>用 <code>ip address</code> 检查设置是否生效!</li>
</ul>
</li>
<li>检查网络，如 <code>ping www.sysu.edu.cn</code></li>
</ul>
</li>
<li>安装 docker 17.03.2 ce
<ul>
<li>在 host 使用 ssh 连接虚拟机，例如：<code>ssh root@192.168.3.200</code></li>
<li>按<a href="https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce">官网指南</a>？ 这个<a href="http://www.cnblogs.com/freefei/p/9263998.html">中文指南更详细</a>。请务必对比官网指南，避免中文落伍给你带来麻烦！</li>
<li>最后，启动 docker 服务并验证
<ul>
<li><code>systemctl enable docker</code></li>
<li><code>systemctl start docker</code></li>
<li><code>docker verson</code></li>
</ul>
</li>
</ul>
</li>
</ol>
<h2 id="3下载需要的镜像">3、下载需要的镜像</h2>
<p>预先在 docker 虚拟机下载镜像，避免你因长时间等待失去耐心。</p>
<p>以下镜像仅试用 rancher/rancher:v2.1.3 版本。容器云的东西变化都太快，https://hub.docker.com/r/rancher/rancher/tags 可看到，这是11天前的版本。</p>
<ul>
<li>rancher 服务器
<ul>
<li>rancher/rancher:v2.1.3</li>
</ul>
</li>
<li>rancher 代理
<ul>
<li>rancher/rancher-agent:v2.1.3</li>
<li>rancher/rke-tools:v0.1.15</li>
</ul>
</li>
<li>kerbernetes manager
<ul>
<li>rancher/hyperkube:v1.11.5-rancher1</li>
<li>rancher/nginx-ingress-controller:0.16.2-rancher1</li>
<li>rancher/calico-node:v3.1.3</li>
<li>rancher/calico-cni:v3.1.3</li>
<li>rancher/k8s-dns-dnsmasq-nanny-amd64:1.14.10</li>
<li>rancher/k8s-dns-kube-dns-amd64:1.14.10</li>
<li>rancher/k8s-dns-sidecar-amd64:1.14.10</li>
<li>rancher/coreos-etcd:v3.2.18</li>
<li>rancher/coreos-flannel:v0.10.0</li>
<li>rancher/pause-amd64:3.1</li>
<li>rancher/metrics-server-amd64:v0.2.1</li>
<li>rancher/nginx-ingress-controller-defaultbackend:1.4</li>
<li>rancher/cluster-proportional-autoscaler-amd64:1.0.0</li>
</ul>
</li>
<li>kerbernetes worker
<ul>
<li>rancher/hyperkube:v1.11.5-rancher1</li>
<li>rancher/nginx-ingress-controller:0.16.2-rancher1</li>
<li>rancher/calico-node:v3.1.3</li>
<li>rancher/calico-cni:v3.1.3</li>
<li>rancher/coreos-flannel:v0.10.0</li>
<li>rancher/pause-amd64:3.1</li>
</ul>
</li>
</ul>
<p>得益于 go 语言及其静态编译技术，现在系统的许多镜像都建立在 scrach 或 alpine 之上，非常的小哦！！！</p>
<h2 id="4安装-kubernetes-快体验">4、安装 kubernetes 快体验</h2>
<ol>
<li>准备环境（在前面 centos docker 基础上）
<ul>
<li>准备 rancher-server-201。 ip = 192.168.3.201, 主机名 rancher-server-201</li>
<li>准备 k8s-manager-210。 ip = 192.168.3.210, 主机名 k8s-manager-210</li>
<li>准备 k8s-worker-220。 ip = 192.168.3.220, 主机名 k8s-worker-220</li>
<li>配置虚拟机网络，建议使用 nmtui，如图：
<ul>
<li><img src="images/net-bridge-host-vm-vmconfig.png" alt=""></li>
</ul>
</li>
</ul>
</li>
<li>安装 rancher 服务器
<ul>
<li><code>docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:v2.1.3</code></li>
<li>在主机浏览器下访问 <code>https://192.168.3.201</code> 出现 lancher 的控制面板</li>
</ul>
</li>
<li>安装 k8s 管理节点
<ul>
<li>在 rancher dashboard 下，Global - Clusters 下  Add Cluster</li>
<li><strong>选 Custom 图标</strong></li>
<li>输入你喜欢的 Cluster Name</li>
<li>按 next 按钮</li>
<li>Node Role <strong>全部选择 Etcd、control Panne、Worker</strong></li>
<li>拷贝系统给出的命令</li>
<li><strong>在 k8s-manager-210 上执行该命令</strong></li>
<li>看到 <code>new node has regostered</code></li>
<li>按 done 按钮</li>
<li>耐心等待一会系统容器启动，State 变为 Active ！</li>
</ul>
</li>
<li>安装 k8s 工作节点
<ul>
<li>点击你的 cluster name</li>
<li>your cluster - nodes 菜单下 Edit Cluster</li>
<li><strong>Cloud Provider 选择 Custom</strong></li>
<li>检查 Node Role <strong>Worker</strong></li>
<li>拷贝系统给出的命令</li>
<li><strong>在 k8s-worker-220 上执行该命令</strong></li>
<li>看到 <code>new node has regostered</code></li>
<li>按 Save 按钮</li>
<li>一会儿 your cluster - nodes 菜单下， work 的 state 变为 Active</li>
</ul>
</li>
<li>同样方法，可以在集群中加入管理与工作节点</li>
</ol>
<h2 id="5在集群中部署-hello-world">5、在集群中部署 hello-world</h2>
<p><strong>5.1 Workload with Ingress</strong></p>
<ol>
<li>部署工作负载（workload）
<ul>
<li>your cluster - Projects/Namespaces. 菜单下 选择 <strong>Project: Default</strong> 项目</li>
<li>点击 Deploy 按钮</li>
<li>输入 workload name， 例如 hello</li>
<li><strong>输入镜像名 <code>rancher/hello-world</code></strong></li>
<li>点击 Launch 按钮</li>
<li>等待系统 pull 镜像 并 启动负载</li>
</ul>
</li>
<li>通过 Ingress 暴露应用
<ul>
<li>在项目控制面板的 Load Balancing 选择 Add Ingress</li>
<li>输入 Ingress 名字 hello</li>
<li>Target Backend 的 Target 下拉选择 hello 负载</li>
<li>外部端口 80</li>
<li>按 Save 按钮</li>
<li>等待 Ingress 服务启动后（L7 Ingress）</li>
<li>点击 Target， 如：hello.default.192.168.3.210.xip.io</li>
<li>web 应用！</li>
</ul>
</li>
<li>添加负载实例数，负载均衡
<ul>
<li>在项目控制面板的 workload 点击 hello 负载</li>
<li>你会发现 负载在某台主机上，如 192.168.3.210
<ul>
<li>如果 ssh 进入 192.168.3.210 主机，使用 docker ps 看到 rancher/hello-world 的实例</li>
</ul>
</li>
<li>在 Scale 点击 <code>+</code> 添加实例</li>
<li>等一会，不出意外新实例在另一台主机上</li>
<li>你大概已知道为什么大家都喜欢在开发环境安装本地仓库了
<ul>
<li>因为你不知道调度在哪太机器上启动容器，如果 pull 容器用 10分钟 &hellip;</li>
<li>如果使用公有云供应商的容器云，请用供应商的 Registry！</li>
</ul>
</li>
<li>你可以在主机上 docker rm 容器，但它们会自动启动新实例</li>
<li>在项目控制面板的 Load Balancing 点击 hello.default.192.168.3.210.xip.io
<ul>
<li>每次会轮询访问主机的实例</li>
</ul>
</li>
</ul>
</li>
<li>了解服务描述文件
<ul>
<li>在项目控制面板的 Service Discovery</li>
<li>我们看到 2 个服务，选择一个，点击后面菜单</li>
<li>选择  View/Edit YAML
<ul>
<li>了解负载或服务配置</li>
</ul>
</li>
</ul>
</li>
</ol>
<p>注：xip.io 是临时域名测试服务网站</p>
<p>Ingress：<a href="https://www.cnblogs.com/justmine/p/8991379.html">详解k8s组件Ingress边缘路由器并落地到微服务</a> 。其实就是 Nginx 和 K8S 官网的搬运工，组织的不错。</p>
<p><strong>5.2 Workload with NodePort</strong></p>
<ol>
<li>部署工作负载（workload）
<ul>
<li>your cluster - Projects/Namespaces. 菜单下 选择 <strong>Project: Default</strong> 项目</li>
<li>点击 Deploy 按钮</li>
<li>输入 workload name， 例如 hello-NodePort</li>
<li><strong>输入镜像名 <code>rancher/hello-world</code></strong></li>
<li><strong>从  Port Mapping 点击 Add Port</strong></li>
<li>从 As a 下拉菜单 <strong>选择 NodePort (On every node)</strong></li>
<li>从 On Listening Port 选择 Random</li>
<li>从 Publish the container port 输入 80</li>
<li>点击 Launch 按钮</li>
</ul>
</li>
<li>添加容器，会实现负载均衡吗？</li>
</ol>
<h2 id="6小结">6、小结</h2>
<p>rancher hello-world 源代码 <a href="https://github.com/rancher/hello-world/">https://github.com/rancher/hello-world/</a>，如何打包出 18M 的镜像？</p>
<p>总结一下，这个过程涉及了哪些技术术语？</p>

    </div>

    <div class="post-copyright">
  <p class="copyright-item">
    <span class="item-title"></span>
    <span class="item-content">潘茂林</span>
  </p>
  <p class="copyright-item">
    <span class="item-title"></span>
    <span class="item-content">
        0001-01-01
        
    </span>
  </p>
  
  
</div>
<footer class="post-footer">
      
      <nav class="post-nav">
        <a class="prev" href="/service-computing/post/readme/">
            <i class="iconfont icon-left"></i>
            <span class="prev-text nav-default"></span>
            <span class="prev-text nav-mobile"></span>
          </a>
        <a class="next" href="/service-computing/post/services-grpc/">
            <span class="next-text nav-default">web 服务构建 - gRPC</span>
            <span class="next-text nav-mobile"></span>
            <i class="iconfont icon-right"></i>
          </a>
      </nav>
    </footer>
  </article>
        </div>
        

  

  

      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="social-links">
      <a href="mailto:panml@mail.sysu.edu.cn" class="iconfont icon-email" title="email"></a>
  <a href="http://pmlpml.git.io/service-computing/index.xml" type="application/rss+xml" class="iconfont icon-rss" title="rss"></a>
</div>

<div class="copyright">
  <span class="power-by">
    %!(EXTRA string=<a class="hexo-link" href="https://gohugo.io">Hugo</a>)
  </span>
  <span class="division">|</span>
  <span class="theme-info">
     - 
    <a class="theme-link" href="https://github.com/olOwOlo/hugo-theme-even">Even</a>
  </span>

  

  <span class="copyright-year">
    &copy; 
    2018 - 
    2020
    <span class="heart">
      <i class="iconfont icon-heart"></i>
    </span>
    <span class="author">潘茂林</span>
  </span>
</div>
    </footer>

    <div class="back-to-top" id="back-to-top">
      <i class="iconfont icon-up"></i>
    </div>
  </div>
  
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/slideout@1.0.1/dist/slideout.min.js" integrity="sha256-t+zJ/g8/KXIJMjSVQdnibt4dlaDxc9zXr/9oNPeWqdg=" crossorigin="anonymous"></script>
  <script src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.1.20/dist/jquery.fancybox.min.js" integrity="sha256-XVLffZaxoWfGUEbdzuLi7pwaUJv1cecsQJQqGLe7axY=" crossorigin="anonymous"></script>



<script type="text/javascript" src="/service-computing/js/main.min.d7b7ada643c9c1a983026e177f141f7363b4640d619caf01d8831a6718cd44ea.js"></script>








</body>
</html>
